import type { ComponentType } from "react";

/**
 * 给 React 组件附加额外属性（如静态方法、子组件、常量等）
 * @param component 目标 React 组件（函数组件、类组件、ForwardRef 组件均可）
 * @param properties 要附加的属性集合（键值对）
 * @returns 增强后的组件（保留原组件类型 + 附加属性类型）
 */
export function attachPropsToComponent<
	C extends ComponentType<any> | { new (...args: any[]): any },
	P extends Record<string, any>
>(component: C, properties: P): C & P {
	// 1. 类型断言：临时转为 any 绕过类型检查（仅内部操作）
	const enhancedComponent = component as unknown as C & P;

	// 2. 遍历属性并挂载到组件上（仅挂载自身属性，排除原型链属性）
	Object.entries(properties).forEach(([key, value]) => {
		// 避免覆盖组件原有属性（可选逻辑，根据需求决定是否保留）
		if (!(key in enhancedComponent)) {
			enhancedComponent[key] = value;
		}
	});

	return enhancedComponent;
}
